//
//  WmcLoginDelegate.swift
//  YPWatermarkCamera
//
//  Created by 赵新 on 2022/5/12.
//

import YPBedrock

// MARK: - [WmcLoginDelegate]

/// 登录代理
/// 一般不会随使用的生命周期自动释放
/// 主要用于同步用户信息
public protocol WmcLoginDelegate: NSObjectProtocol {
    /// 需要进行登录
    /// - Parameters:
    ///   - attribute: 当前水印相机的属性
    ///   - animated: 需要调用登录时候，是否需要动画
    ///   - success: 当外部登录成功后，需要通过该Block进行回调通知登录成功
    ///   - failure: 当外部登录失败后，需要通过该Block进行回调通知登录失败
    func loginNeed(_ attribute: WmcAttribute,
                   animated: Bool,
                   success: YPBlock.Empty?,
                   failure: YPBlock.Empty?)

    /// 登录失效
    /// - Parameters:
    ///   - attribute: 当前水印相机的属性
    ///   - data: 后端返回的数据
    ///   - code: 后端返回的代码
    ///   - message: 后端返回的信息
    func loginInvalid(_ attribute: WmcAttribute,
                      data: Any?,
                      code: Int64,
                      message: String?)
}

// MARK: - 驱动方法

public extension WmcLoginDelegate {
    /// 注册登录信息（给其他平台使用的-推荐）
    /// - Parameter userModel: 模型
    func wmc_registerLogin(userModel: WmcYupaoAccountProtocol,
                           success: (() -> Void)? = nil,
                           failure: ((YPNetworkError?) -> Void)? = nil)
    {
        WmcLoginManager.setYupaoAccountModel(userModel: userModel, success: success, failure: failure)
    }

    /// 注册登录信息（给其他平台使用的）
    /// - Parameter userInfo: 字典
    func wmc_registerLogin(userInfo: [String: String],
                           success: (() -> Void)? = nil,
                           failure: ((YPNetworkError?) -> Void)? = nil)
    {
        WmcLoginManager.setYupaoAccountModel(userInfo: userInfo, success: success, failure: failure)
    }

    /// 退出登录
    func wmc_logout() {
        WmcLoginManager.logout()
    }
}
